--[套装属性]
local tz_data = {}
for _,info in ipairs(load_excel('存档数据.xlsx','套装属性')) do
    local lv = info['T级']
    if not tz_data[lv] then
        tz_data[lv] = {}
    end
    
    info.tip = ('%0.f件：%s'):format(info['件数'],format_obj(info,info['属性']))
    info.attrs = cd_unpack_attrs(info['属性'],'data')

    table.insert(tz_data[lv],info)
end

--套装介绍
function get_cdtz_tip(name)
    if name=='宝石' then
        return nil
    end
    local list = ac.player.self:get_data('存档套装计数') or {}
    local data = tz_data[name] or {}
    local num = list[name] or 0
    local tips = {}
    for a,info in ipairs(data) do
        if num>=info['件数'] then
            tips[a] = ('|cff00ff00%s|r'):format(info.tip)
        else
            tips[a] = ('|cff999999%s|r'):format(info.tip)
        end
    end
    return ('%s套装(%s/6)|n%s'):format(name,num,table.concat(tips,'|n'))
end

ac.game:event '玩家-刷新套装介绍'(function(_,player)
    local data = player:get_data('存档装备-携带')
    local list = {}
    for key,item in pairs(data) do
        local name = item['前缀']
        if list[name]==nil then
            list[name] = 0
        end
        list[name] = list[name] + 1
    end
    player:set_data('存档套装计数',list)
end)

ac.game:event '玩家-加载套装属性'(function(_,player,hero)
    player:notify('玩家-刷新套装介绍',player)

    local list = ac.player.self:get_data('存档套装计数') or {}
    for name,num in pairs(list) do
        local data = tz_data[name] or {}
        for a=#data,1,-1 do
            local info = data[a]
            if num>=info['件数'] then
                load_cdsx(hero,info,'attrs')
                break
            end
        end
    end
end)




--[词条数据]
local entry = {}
local xxs = {
    ['★'] = 1,
    ['★★'] = 2,
    ['★★★'] = 3,
}
local funcs = {}
for _,info in ipairs(load_excel('存档数据.xlsx','词条')) do
    local xx = info['星级']
    local lv = xxs[xx]
    if not entry[lv] then
        entry[lv] = {}
    end
    info.name = ('%s%s'):format(xx,info['名称'])
    info.tip = format_obj(info, info['效果'])
    table.insert(entry[lv],info)
end


--词条内容
function get_cdct_tip(info)
    local affix = {}
    local tips = {}
    local abis = info.abi or {}
    local lock = {}
    if info.class=='宝石' or info.class==nil then
        local xx = math.floor(abis/1000)
        local id = abis%1000
        local abi = entry[xx][id]
        info.art = [[ReplaceableTextures\CommandButtons\BTNGem.blp]]
        info.title = ('%s%s'):format(abi['星级'],abi['名称'])
        info.tip = ('%s|n|n|cff00ffff将宝石拖动至装备镶嵌|r'):format(abi.tip)
        info['前缀'] = '宝石'
        
        return
    end
    for a,abi in ipairs(abis) do
        local xx = math.floor(abi/1000)
        local id = abi%1000
        local abi = entry[xx][id]
        if lock[abi]==nil then
            lock[abi] = true
            affix[a] = abi
            tips[a] = ('|cffff9900%s%s:|r|n%s'):format(abi['星级'],abi['名称'],abi.tip)
        end
    end

    info.abi_list = affix
    if #tips>0 then
        info.abi_tip = table.concat(tips,'|n|n')
    end
end

ac.game:event '玩家-加载词条属性'(function(_,player,hero)
    local data = player:get_data('存档装备-携带') or {}
    local lock = {}
    for key,item in pairs(data) do
        local abi = item.abi_list or {}
        for _,temp in ipairs(abi) do
            local func = funcs[temp.name]
            if func and lock[temp.name]==nil then
                lock[temp.name] = true
                func(temp,hero)
            end
        end
    end
end)


funcs['★毁灭'] = function(self,hero)

end
funcs['★神射手'] = function(self,hero)
    hero:add('攻击距离',self.data1)
end
funcs['★坚定'] = function(self,hero)
    hero:event '单位-受到伤害前'(function(_,_,target,data)
        if target:is_type('精英') then
            data:div(self.data1)
        end
    end)
end

funcs['★狂战士'] = function(self,hero)
    hero:event '单位-攻击命中'(function(_,_,target,data)
        hero:add_buff '狂战士-加速'{
            time = 2,
            count = 0,
            max = self.data2,
            on_add = function(buff)
                buff.count = buff.count + 1
                buff:gc(hero:add('攻击速度',self.data1))
            end,
            on_cover = function(buff,new)
                if buff.count<buff.data2 then
                    buff:on_add()
                end
		        buff:set_remaining(new.time)
            end
        }
    end)
end

funcs['★吸血鬼'] = function(self,hero)
    hero:add('攻击吸血%',self.data1)
end

funcs['★莽夫'] = function(self,hero)
    hero:event '单位-造成伤害前'(function(_,_,target,data)
        if target:is_type('普通') then
            data:mul(self.data1)
        end
    end)
    hero:event '单位-受到攻击命中'(function(_,_,target,data)
        if target:is_type('普通') then
            data:div(self.data1)
        end
    end)
end

funcs['★财富'] = function(self,hero)
    hero:add('每秒金币',self.data1)
end

funcs['★先锋'] = function(self,hero)
    local open = nil
    hero:loop(200,function()
        if hero:get('当前生命百分比')<self.data1 then
            if open then
                open:remove()
                open = nil
            end
        else
            if open==nil then
                open = hero:add('护甲加成',self.data2)
            end
        end
    end)
end

funcs['★不屈'] = function(self,hero)
    local count = 0
    hero:loop(200,function()
        local ex = math.floor((100 - hero:get('当前生命百分比'))/self.data1) * self.data2
        hero:add('护甲加成',ex - count)
        count = ex
    end)
end
funcs['★染血'] = function(self,hero)
    local count = 0
    hero:loop(200,function()
        local ex = math.floor((100 - hero:get('当前生命百分比'))/self.data1) * self.data2
        hero:add('伤害增幅',ex - count)
        count = ex
    end)
end

funcs['★穿甲'] = function(self,hero)
    hero:add('护甲穿透',self.data1)
end
funcs['★力量增幅'] = function(self,hero)
    hero:add('力量加成',self.data1)
end
funcs['★敏捷增幅'] = function(self,hero)
    hero:add('敏捷加成',self.data1)
end
funcs['★智力增幅'] = function(self,hero)
    hero:add('智力加成',self.data1)
end
funcs['★坦克'] = function(self,hero)
    hero:add('生命加成',self.data1)
end
funcs['★★死神'] = function(self,hero)
    local count = 0
    hero:event '单位-杀死单位'(function(_,_,target)
        if target:is_type('Boss') then
            if count<self.data2 then
                count = count + self.data1
                hero:add('最终伤害',self.data1)
            end
        end
    end)
end
funcs['★★BOSS杀手'] = function(self,hero)
    hero:event '单位-造成伤害前'(function(_,_,target,data)
        if target:is_type('Boss') then
            data:mul(self.data1)
        end
    end)
end
funcs['★★狂怒'] = function(self,hero)
    hero:add('暴击几率',self.data1)
    hero:add('暴击伤害',self.data2)
end
funcs['★★魔爆'] = function(self,hero)
    hero:add('法爆几率',self.data1)
    hero:add('法爆伤害',self.data2)
end
funcs['★★异况超量'] = function(self,hero)
    hero:event '单位-获得状态'(function(_,_,buff)
        if buff.debuff then
            buff:gc(hero:add('攻击加成',self.data1))
        end
    end)
end
funcs['★★力量增幅'] = function(self,hero)
    hero:add('力量加成',self.data1)
end
funcs['★★敏捷增幅'] = function(self,hero)
    hero:add('敏捷加成',self.data1)
end
funcs['★★智力增幅'] = function(self,hero)
    hero:add('智力加成',self.data1)
end
funcs['★★坦克'] = function(self,hero)
    hero:add('护甲加成',self.data1)
end
funcs['★★毁灭'] = function(self,hero)
    hero:event '单位-攻击命中'(function(_,_,target,data)
        hero:add_buff '毁灭-增伤'{
            time = 2,
            count = 0,
            max = self.data2,
            on_add = function(buff)
                buff.count = buff.count + 1
                buff:gc(hero:add('伤害增幅',self.data1))
            end,
            on_cover = function(buff,new)
                if buff.count<buff.data2 then
                    buff:on_add()
                end
		        buff:set_remaining(new.time)
            end
        }
    end)
end
funcs['★★坚定'] = function(self,hero)
    hero:event '单位-受到伤害前'(function(_,_,target,data)
        if target:is_type('精英') then
            data:div(self.data1)
        end
    end)
end
funcs['★★吸血鬼'] = function(self,hero)
    hero:add('攻击吸血%',self.data1)
end
funcs['★★财富'] = function(self,hero)
    hero:add('每秒金币',self.data1)
end
funcs['★★先锋'] = function(self,hero)
    local open = nil
    hero:loop(200,function()
        if hero:get('当前生命百分比')<self.data1 then
            if open then
                open:remove()
                open = nil
            end
        else
            if open==nil then
                open = hero:add('护甲加成',self.data2)
            end
        end
    end)
end
funcs['★★不屈'] = function(self,hero)
    local count = 0
    hero:loop(200,function()
        local ex = math.floor((100 - hero:get('当前生命百分比'))/self.data1) * self.data2
        hero:add('护甲加成',ex - count)
        count = ex
    end)
end
funcs['★★染血'] = function(self,hero)
    local count = 0
    hero:loop(200,function()
        local ex = math.floor((100 - hero:get('当前生命百分比'))/self.data1) * self.data2
        hero:add('伤害增幅',ex - count)
        count = ex
    end)
end
funcs['★★成长'] = function(self,hero)
    ac.game:event '游戏-新的一天'(function()
        hero:add('全属性加成',self.data1)
    end)
end
funcs['★★★快枪手'] = function(self,hero)
    local open = nil
    hero:loop(200,function()
        if hero:get('当前生命百分比')<self.data1 then
            if open then
                open:remove()
                open = nil
            end
        else
            if open==nil then
                open = hero:add('攻击速度',self.data2)
            end
        end
    end)
end
funcs['★★★斩杀线'] = function(self,hero)
    hero:event '单位-造成伤害前'(function(_,_,target,data)
        if target:get('当前生命百分比')<self.data1 then
            data:mul(self.data2)
        end
    end)
end
funcs['★★★猛攻'] = function(self,hero)
    hero:event '单位-攻击命中'(function(_,_,target,data)
        hero:add_buff '狂战士-加速'{
            time = 1,
            count = 0,
            max = self.data2,
            on_add = function(buff)
                buff.count = buff.count + self.data1
                buff:gc(hero:add('攻击加成',self.data1))
            end,
            on_cover = function(buff,new)
                if buff.count<buff.data2 then
                    buff:on_add()
                end
		        buff:set_remaining(new.time)
            end
        }
    end)
end
funcs['★★★多重施法'] = function(self,hero)
    hero:event '单位-发动技能效果'(function(_,_,skill)
        if math.random(100)<=self.data1 then
            skill:notify('on_cast_shot')
        end
    end)
end
funcs['★★★元素大师'] = function(self,hero)
    local open = nil
    hero:loop(200,function()
        if hero:get('智力')>hero:get('力量') + hero:get('敏捷') then
            if open then
                open:remove()
                open = nil
            end
        else
            if open==nil then
                open = hero:add('智力加成',self.data1)
            end
        end
    end)
end
funcs['★★★黑蚀'] = function(self,hero)
    hero:event '单位-攻击命中'(function(_,_,target,data)
        hero:create_damage(target,hero:get('攻击') * self.data1/100,'真实')
    end)
end
funcs['★★★能量激增'] = function(self,hero)
    hero:loop(self.data1*1000,function()
        hero:add_buff '狂战士-加速'{
            time = self.data2,
            on_add = function(buff)
                buff:gc(hero:add('攻击加成',self.data3))
            end,
        }
    end)
end
funcs['★★★钢筋铁骨'] = function(self,hero)
    local count = 0
    hero:event '单位-更换英雄'(function()
        if count<self.data2 then
            hero:add('护甲加成',self.data1)
        end
    end)
end
